package drp.snowbell.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface AProperty {

	/**
	 * 标签.默认是Field名称的大写下划线格式
	 * 
	 * @return
	 */
	String label() default "";

	/**
	 * 是否唯一.建议唯一为true的话isReadOnly也设置为true.
	 * 
	 * @return
	 */
	boolean isUnique() default false;

	/**
	 * 是否只读.数据创建以后就不允许修改(譬如用户昵称)
	 * 
	 * @return
	 */
	boolean isReadOnly() default false;

	/**
	 * 基本数据类型,默认会根据Field类型判断并设置其值.
	 * 
	 * @return
	 */
	String valueType() default "";

	/**
	 * 是否必填
	 * 
	 * @return
	 */
	boolean isRequired() default false;

	/**
	 * 关联
	 * 
	 * @return
	 */
	String relation() default "";

	/**
	 * 数据库字段名.默认是Field的名称.如果长度为0的字符串,则表示不在数据库存储此字段,即isDbField为false
	 * 
	 * @return
	 */
	String dbFieldName() default "";// 数据库字段名称

	/**
	 * 是否持久化
	 * 
	 * @return
	 */
	boolean isPersistent() default true;

	/**
	 * 数据库字段长度.默认是配置的defaultDbLength值
	 * 
	 * @return
	 */
	int dbLength() default 0;

	/**
	 * 数据库字段类型.默认根据Filed反射得到的类型进行判断设置合适的值.
	 * 
	 * @return
	 */
	String dbType() default "";

	/**
	 * 数据库默认值,默认为NULL(空字符串)
	 * 
	 * @return
	 */
	String dbDefaultValue() default "";

	/**
	 * setter的函数名称.默认的话为 set+name
	 * 
	 * @return
	 */
	String setter() default "";

	/**
	 * getter的函数名称.默认的话为 get+name
	 * 
	 * @return
	 */
	String getter() default "";

	/**
	 * 是否对此属性建立全文搜索.
	 * 
	 * @return
	 */
	String fullTextConfig() default "";
}
